import os
import ast
from pathlib import Path
from utils.logger import get_logger

logger = get_logger()

def validate_python_file(file_path):
    """
    验证Python文件
    
    Args:
        file_path (str): 文件路径
        
    Returns:
        bool: 是否为有效的Python文件
    """
    # 检查文件扩展名
    if not file_path.endswith('.py'):
        logger.error('文件必须是.py格式')
        return False
    
    # 检查文件是否存在
    if not os.path.exists(file_path):
        logger.error(f'文件不存在: {file_path}')
        return False
    
    # 检查是否为文件(而非目录)
    if not os.path.isfile(file_path):
        logger.error(f'路径不是文件: {file_path}')
        return False
    
    # 检查文件大小
    file_size = os.path.getsize(file_path)
    if file_size == 0:
        logger.error('文件为空')
        return False
    
    if file_size > 10 * 1024 * 1024:  # 10MB
        logger.warning(f'文件较大({file_size / 1024 / 1024:.2f}MB),打包可能需要较长时间')
        
    # 验证Python语法
    try:
        with open(file_path, 'r', encoding='utf-8') as f:
            content = f.read()
            ast.parse(content)
        logger.info(f'文件验证通过: {Path(file_path).name}')
        return True
    except UnicodeDecodeError:
        # 尝试其他编码
        try:
            with open(file_path, 'r', encoding='gbk') as f:
                content = f.read()
                ast.parse(content)
            logger.warning('文件使用GBK编码,建议使用UTF-8编码')
            return True
        except Exception:
            logger.error('文件编码错误,无法读取')
            return False
    except SyntaxError as e:
        logger.error(f'Python语法错误: 第{e.lineno}行 - {e.msg}')
        return False
    except Exception as e:
        logger.error(f'文件验证失败: {str(e)}')
        return False